package com.hr.common.utils;



import com.hr.system.entity.SysDept;
import com.hr.system.entity.SysMenu;
import com.hr.system.entity.vo.DeptTree;
import com.hr.system.entity.vo.MenuTree;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class DeptUtil {

    /**
     * 转换为菜单树
     * @param depts 菜单集合*/
    public static List<DeptTree> getDeptTree(List<SysDept> depts){
        //1.准备菜单树 结果 集合
        List<DeptTree> deptTrees=new ArrayList<>();
        //2.基于函数式编程 实现数据的组装处理
        if(depts!=null && depts.size()>0){
            //遍历集合 转换为 Dept-->DeptTree
            List<DeptTree> trees=depts.stream().map(m-> EntityConvertUtil.convert(m,DeptTree.class)).collect(Collectors.toList());
//            List<DeptTree> collect = trees.stream().filter(m -> m.getParentId() == 0).collect(Collectors.toList());
            //获取对应的 子菜单
            trees.forEach(t->{
                //寻找子菜单
                List<DeptTree> children=getChildrenMenu(t.getId(),trees);
                //将子菜单添加到当前菜单上
                t.setChildren(children);
            });
            deptTrees.addAll(trees);
        }
         return deptTrees.stream().filter(d->d.getParentId()==0).collect(Collectors.toList());
    }
    /**
     * 获取指定菜单的子菜单
     * @param id 菜单id
     * @param treeList 菜单集合*/
    private static List<DeptTree> getChildrenMenu(Integer id,List<DeptTree> treeList){
        return treeList.stream().filter(t->t.getParentId()==id).collect(Collectors.toList());
    }
}
